// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IStep.cs" company="">
//   
// </copyright>
// --------------------------------------------------------------------------------------------------------------------
namespace ExecutionTool.Common
{
    using System;

    public interface IStep<TStepInfo> : IStep
    {
        #region Public Methods and Operators

        TStepInfo Start();

        #endregion
    }

    public interface IStep
    {
        #region Public Events

        event EventHandler<FaultedEventArgs> Faulted;

        event EventHandler Finished;

        event EventHandler<ProgressedEventArgs> Progressed;

        #endregion

        #region Public Properties

        bool CanAbort { get; }

        bool CanReportProgress { get; }

        StepState StepState { get; }

        #endregion

        #region Public Methods and Operators

        void Abort();

        double GetProgress();

        #endregion
    }
}
